<?php
/**
* Classe de controle
* Cria a visualização da pesquisa de um objeto : Lançamento
* @package Sistema
* @subpackage Lançamento
*/
class CLancamento_verPorConta extends controlePadraoPesquisa{
	protected $totais;
	/**
	 * Coleção de contas
	 * @var colecaoPadraoNegocio
	 */
	protected static $coContas;
	/**
	* Método que define o objeto de negócio que executará a pesquisa
	*/
	public function definirFiltro(){
	 try {
			$this->filtro = new NLancamento();
			$filtro = new colecao();
			if (
					isset($_REQUEST['conta']) ||
					isset($_REQUEST['dataInicial']) ||
					isset($_REQUEST['dataFinal'])
			) {
				if (isset($_REQUEST['dataInicial']) && $_REQUEST['dataInicial'])
					$filtro->dataInicial = new TData($_REQUEST['dataInicial']);
				if (isset($_REQUEST['dataFinal']) && $_REQUEST['dataFinal'])
					$filtro->dataFinal = new TData($_REQUEST['dataFinal']);
				if (isset($_REQUEST['conta']))
					$filtro->idConta = $_REQUEST['conta'];
				$this->sessao->registrar('filtroPorConta', $filtro);
			}else {
				if (!$this->sessao->tem('filtroPorConta')) {
					$this->sessao->registrar('filtroPorConta', $filtro);
				}
			}
			$nLancamento = new NLancamento();
			$this->totais = $nLancamento->lerMovimentoPorConta($this->sessao->pegar('filtroPorConta')->itens);
		} catch (Exception $exc) {
		//	echo $exc->getTraceAsString();
		}
	}
	/**
	* Método que define a página que será exibida na pesquisa
	*/
	public function definirPagina($variavelSessao = 'paginaPorConta'){
		parent::definirPagina($variavelSessao);
	}
	/**
	* Método de criação da coleção a ser listada
	* @return colecaoPadraoNegocio coleção a ser listada
	*/
	public function definirColecao(){
		$filtro = $this->sessao->tem('filtroPorConta') ? $this->sessao->pegar('filtroPorConta') : new colecao();
		if($filtro->possuiItens()){
			$nLancamento = new NLancamento();
			return $nLancamento->lerPorConta($this->pegarPagina(),$this->sessao->pegar('filtroPorConta')->itens);
		}
		$this->totais['debito'] = new TMoeda(0);
		$this->totais['credito'] = new TMoeda(0);
		$this->totais['total'] = new TMoeda(0);
		return new colecaoPadraoNegocio();
	}
	/**
	* Preenche os itens da propriedade menuPrograma
	* @return colecaoPadraoMenu do menu do programa
	*/
	function montarMenuPrograma(){
		$menu = new colecaoPadraoMenu();
		$menu->pesquisar = new VMenu('Pesquisar', 'javascript:$("form").submit()');
		return $menu;
	}
	/**
	* metodo de apresentação do negocio
	* @param negocio objeto para a apresentação
	*/
	public function montarApresentacao(negocio $negocio, $tipo = 'edicao'){
		parent::montarApresentacao($nLancamento = new NLancamento(), $tipo);
		parent::registrarInternacionalizacao($nLancamento, $this->visualizacao);
		$arFiltro = $this->sessao->pegar('filtroPorConta')->itens;
		$this->visualizacao->dataInicial = VComponente::montar(VComponente::data, 'dataInicial', (isset($arFiltro['dataInicial'])?$arFiltro['dataInicial']:''));
		$this->visualizacao->dataFinal = VComponente::montar(VComponente::data, 'dataFinal', (isset($arFiltro['dataFinal'])?$arFiltro['dataFinal']:''));
		$this->visualizacao->identificadorDaConta = isset($arFiltro['idConta']) ? $arFiltro['idConta'] : '';
		$this->visualizacao->totais = $this->totais;
		$this->visualizacao->action = '?c=CLancamento_verPorConta&pagina=1';
		$this->visualizacao->tituloEspecifico = 'Lançamentos por conta';
		$this->visualizacao->conta->valor = (isset($arFiltro['idConta']) ? $arFiltro['idConta'] : '');

	}
	/**
	 * Método de apresentação da listagem
	 * @param visualizacao $visualizacao
	 * @param colecao $colecao
	 * @param pagina $pagina
	 */
	public static function montarListagem(visualizacao $visualizacao,colecao $colecao,pagina $pagina, $entidade = null){
		$visualizacao->listagem = new VListaPaginada($colecao,$pagina, $entidade);
		$visualizacao->listagem->adicionarColunaPersonalizada('Data', 'CLancamento_verPorConta::data', null, 'centro',1);
		$visualizacao->listagem->adicionarColunaPersonalizada('Conta', 'CLancamento_verPorConta::conta', null, 'esquerda',3);
		$visualizacao->listagem->adicionarColuna('Descrição', 'descricao', null, 'esquerda',4);
		$visualizacao->listagem->adicionarColunaPersonalizada('Saída', 'CLancamento_verPorConta::credito', null, 'direita',5);
		$visualizacao->listagem->adicionarColunaPersonalizada('Entrada', 'CLancamento_verPorConta::debito', null, 'direita',6);
		$visualizacao->listagem->removerColuna(VListaPaginada::colunaEditar);
		$visualizacao->listagem->removerColuna(VListaPaginada::colunaExcluir);
	}/**/

	public static function data(NLancamento $nLancamento){
		return "<a class='dado-lancamento datalan' href='?c=CLancamento_verPorConta&pagina=1&dataInicial={$nLancamento->pegarData()}&dataFinal={$nLancamento->pegarData()}'>{$nLancamento->pegarData()}</a>";
	}
	public static function identificador(NLancamento $nLancamento){
		return "<span class='dado-lancamento identificador' id='lan_{$nLancamento->valorChave()}'>{$nLancamento->valorChave()}</span>";
	}
	public static function conta(NLancamento $nLancamento){
		$nConta = CLancamento_verPorConta::pegarContas()->pegar($nLancamento->pegarconta());
		return "<a class='dado-lancamento conta' title='{$nConta->pegarNomeDaConta()}' idConta='{$nConta->valorChave()}' href='?c=CLancamento_verPorConta&pagina=1&conta={$nLancamento->pegarconta()}'>{$nConta->pegarNomeDaConta()}</a>";
	}
	public static function historico(NLancamento $nLancamento){
		return "<span class='dado-lancamento historico'>{$nLancamento->pegarHistorico()}</span>";
	}
	public static function credito(NLancamento $nLancamento){
		$valor = $nLancamento->pegarTipo() == NLancamento::Credito ? $nLancamento->pegarValor() : '';
		return "<span class='dado-lancamento credito'>{$valor}</span>";
	}
	public static function debito(NLancamento $nLancamento){
		$valor = $nLancamento->pegarTipo() == NLancamento::Debito ? $nLancamento->pegarValor() : '';
		return "<span class='dado-lancamento debito'>{$valor}</span>";
	}
	public static function Editar(NLancamento $nLancamento){
		return '<a href="#"><img border="0" src=".sistema/icones/pencil.png" class="editar"></a>';
	}

	/**
	 * Coleção de contas
	 * @return colecaoPadraoNegocio
	 */
	public static function pegarContas(){
		if(!CLancamento_verPorConta::$coContas){
			$nConta = new NConta();
			CLancamento_verPorConta::$coContas = $nConta->lerTodos();
		}
		return CLancamento_verPorConta::$coContas;
	}

}
?>